home *** CD-ROM | disk | FTP | other *** search
/ Programmer Plus 2007 / Programmer-Plus-2007.iso / Programming / Low Level Languages / PCLOGO / SETUP / SETUP.MS_ / SETUP.MS
Encoding:
Text File  |  1994-05-23  |  10.9 KB  |  410 lines

  1. '**************************************************************************
  2. '*                       PC Logo for Windows Setup
  3. '*                  (C) 1993 by Harvard Associates, Inc.
  4. '**************************************************************************
  5.  
  6. '$INCLUDE 'setupapi.inc'
  7. '$INCLUDE 'msdetect.inc'
  8. '$INCLUDE 'msregdb.inc'
  9.  
  10. DECLARE FUNCTION ShowWindow LIB "USER" (Hwnd%, Mode%) AS INTEGER
  11.  
  12. ' *************************** TRANSLATABLE ITEMS **************************
  13.  
  14. CONST DEST   = "C:\WINLOGO"
  15. CONST SMPL   = "SAMPLES"
  16. CONST BANNER = "PC Logo for Windows Setup"
  17. CONST ABOUT  = "⌐ 1994 by Harvard Associates, Inc."
  18. CONST FATAL  = "Setup sources were corrupted, call your local distributor!"
  19. CONST OLDWIN = "You will need a few Windows 3.1 files to run PC Logo."
  20. CONST README = "Read Me"
  21.  
  22. ' *************************** INSTALLATION SIZES **************************
  23.  
  24. CONST SIZE_PROGRAMS = 500        ' LOGO.EXE and DLLs
  25. CONST SIZE_HELP     = 800        ' LOGO.HLP
  26. CONST SIZE_SAMPLES  =  35        ' Logo Samples
  27.  
  28. ' ******************** NO TRANSLATION BEYOND THIS POINT *******************
  29.  
  30. 'Dialog ID's
  31. CONST WELCOME                  =   100
  32. CONST ASKQUIT                  =   200
  33. CONST DESTPATH                 =   300
  34. CONST EXITFAILURE              =   400
  35. CONST EXITQUIT                 =   600
  36. CONST EXITSUCCESS              =   700
  37. CONST APPHELP                  =   900
  38. CONST WIN30WARNING             =  1000
  39. CONST CHECK                    =  2500
  40. CONST TOOBIGDST                =  6200
  41. CONST TOOBIGWIN                =  6300
  42. CONST BADPATH                  =  6400
  43.  
  44. 'Bitmap ID
  45. CONST LOGO = 1
  46.  
  47. GLOBAL CUIDLL$
  48. GLOBAL SrcDir$                ' source directory
  49. GLOBAL DstDir$                ' Default destination directory.
  50. GLOBAL SampleDir$            ' Samples directory
  51.  
  52. GLOBAL WINDISK$, DSTDISK$    ' source, destination disk
  53. GLOBAL WINFREE&, DSTFREE&    ' free space on those disks
  54. GLOBAL WINREQ&,  DSTREQ&    ' required space
  55.  
  56. GLOBAL PROGREQ&                ' required program space
  57. GLOBAL HELPREQ&                ' required help file space
  58. GLOBAL SAMPLEREQ&            ' required sample file space
  59.  
  60. GLOBAL PROGS$, HELP$, SAMPLES$ ' either ON or OFF
  61.  
  62. DECLARE SUB Install
  63.  
  64. DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING
  65. DECLARE FUNCTION N2K( N& ) AS STRING
  66. DECLARE FUNCTION CheckDisks AS INTEGER
  67. DECLARE FUNCTION GroupSize( GROUP$ ) AS LONG
  68. DECLARE SUB AskForQuit
  69. DECLARE SUB AddSamplesIcons
  70.  
  71. INIT:
  72.  
  73.     DstDir$ = DEST
  74.     Title$ = BANNER
  75.     SetAbout Title$, ABOUT
  76.  
  77.     CUIDLL$ = "logodlgs.dll"            ''Custom user interface dll
  78.     HELPPROC$ = "FHelpDlgProc"          ''Help dialog procedure
  79.  
  80.     SetBitmap CUIDLL$, LOGO
  81.     SetTitle Title$
  82.     SrcDir$ = GetSymbolValue( "STF_SRCDIR" )
  83.  
  84.     Frame% = HwndFrame()
  85.     I% = ShowWindow (Frame%, 3)
  86.  
  87.     szInf$ = GetSymbolValue("STF_SRCINFPATH")
  88.     IF szInf$ = "" THEN
  89.         szInf$ = GetSymbolValue("STF_CWDDIR") + "SETUP.INF"
  90.     END IF
  91.     ReadInfFile szInf$
  92.  
  93.     ' collect file sizes
  94.     CursorSave% = ShowWaitCursor()
  95.     PROGREQ&   = GroupSize( "Programs" )
  96.     HELPREQ&   = GroupSize( "Help" )
  97.     SAMPLEREQ& = GroupSize( "Samples" )
  98.     RestoreCursor CursorSave%
  99.     ClearCopyList
  100.  
  101. ' 1. Issue the welcome message
  102.  
  103. WELCOME:
  104.     sz$ = UIStartDlg(CUIDLL$, WELCOME, "FInfoDlgProc", APPHELP, HELPPROC$)
  105.     IF sz$ = "CONTINUE" THEN
  106.         UIPop 1
  107.     ELSE
  108.         GOSUB ASKQUIT
  109.         GOTO WELCOME
  110.     END IF
  111.  
  112. ' 1a. Issue the Windows 3.0 warning
  113.  
  114.     IF GetWindowsMajorVersion() = 3 AND GetWindowsMinorVersion() = 0 THEN
  115.         sz$ = UIStartDlg(CUIDLL$, WIN30WARNING, "FInfoDlgProc", APPHELP, HELPPROC$)
  116.         IF sz$ = "CONTINUE" THEN
  117.             UIPop 1
  118.         ELSE
  119.             GOSUB ASKQUIT
  120.             GOTO WELCOME
  121.         END IF
  122.     END IF
  123.  
  124. ' 2. Enter the destination path
  125.  
  126. GETPATH:
  127.     SetSymbolValue "EditTextIn", DstDir$
  128.     SetSymbolValue "EditFocus", "END"
  129. GETPATHL1:
  130.     sz$ = UIStartDlg(CUIDLL$, DESTPATH, "FEditDlgProc", APPHELP, HELPPROC$)
  131.     DstDir$ = GetSymbolValue("EditTextOut")
  132.  
  133.     IF sz$ = "CONTINUE" THEN
  134.         IF IsDirWritable(DstDir$) = 0 THEN
  135.             GOSUB BADPATH
  136.             GOTO GETPATHL1
  137.         END IF
  138.         UIPop 1
  139.     ELSEIF sz$ = "REACTIVATE" THEN
  140.         GOTO GETPATHL1
  141.     ELSEIF sz$ = "BACK" THEN
  142.         UIPop 1
  143.         GOTO WELCOME
  144.     ELSE
  145.         GOSUB ASKQUIT
  146.         GOTO GETPATH
  147.     END IF
  148.  
  149. ' 2. Collect the parts of WinLogo to install
  150.  
  151. OPTION:
  152.     ' default: copy everything
  153.     FOR i% = 1 TO 3 STEP 1
  154.         AddListItem "CheckItemsState", "ON"
  155.     NEXT
  156.     ' Retrieve the space values for Windows and destination drive
  157.     WINDISK$ = MID$( GetWindowsDir(), 1, 1 )
  158.     DSTDISK$ = MID$( DstDir$, 1, 1 )
  159.     WINFREE& = GetFreeSpaceForDrive( WINDISK$ )
  160.     DSTFREE& = GetFreeSpaceForDrive( DSTDISK$ )
  161.     WINREQ&  = 0
  162.     DSTREQ&  = 0
  163.  
  164.     REQ& = PROGREQ&
  165.     AddListItem "StatusItemsText", N2K( REQ& )
  166.     AddListItem "StatusItemsText", N2K( HELPREQ& )
  167.     AddListItem "StatusItemsText", N2K( SAMPLEREQ& )
  168. OPTL1:
  169.     sz$ = UIStartDlg(CUIDLL$, CHECK, "FCustInstDlgProc", APPHELP, HELPPROC$)
  170.  
  171.     IF sz$ = "CONTINUE" THEN
  172.         IF NOT CheckDisks() THEN
  173.             UIPop 1
  174.             GOTO GETPATH
  175.         END IF
  176.         PROGS$   = GetListItem( "CheckItemsState", 1 )
  177.         HELP$    = GetListItem( "CheckItemsState", 2 )
  178.         SAMPLES$ = GetListItem( "CheckItemsState", 3 )
  179.         IF PROGS$ = "OFF" AND HELP$ = "OFF" AND SAMPLES$ = "OFF" THEN
  180.             GOTO OPTL1
  181.         END IF
  182.         UIPop 1
  183.     ELSEIF sz$ = "REACTIVATE" THEN
  184.         GOTO OPTL1
  185.     ELSEIF sz$ = "BACK" THEN
  186.         UIPop 1
  187.         GOTO GETPATH
  188.     ELSEIF sz$ = "CHK1" THEN
  189.         PROGS$ = GetListItem( "CheckItemsState", 1 )
  190.         IF PROGS$ = "OFF" THEN
  191.             ReplaceListItem    "StatusItemsText", 1, "0 K"
  192.         ELSE
  193.             ReplaceListItem    "StatusItemsText", 1, N2K( REQ& )
  194.         END IF
  195.         GOTO OPTL1
  196.     ELSEIF sz$ = "CHK2" THEN
  197.         HELP$ = GetListItem( "CheckItemsState", 2 )
  198.         IF HELP$ = "OFF" THEN
  199.             ReplaceListItem    "StatusItemsText", 2, "0 K"
  200.         ELSE
  201.             ReplaceListItem    "StatusItemsText", 2, N2K( HELPREQ& )
  202.         END IF
  203.         GOTO OPTL1
  204.     ELSEIF sz$ = "CHK3" THEN
  205.         SAMPLES$ = GetListItem( "CheckItemsState", 3 )
  206.         IF SAMPLES$ = "OFF" THEN
  207.             ReplaceListItem    "StatusItemsText", 3, "0 K"
  208.         ELSE
  209.             ReplaceListItem    "StatusItemsText", 3, N2K( SAMPLEREQ& )
  210.         END IF
  211.         GOTO OPTL1
  212.     ELSE
  213.         GOSUB ASKQUIT
  214.         GOTO OPTION
  215.     END IF
  216.  
  217.     Install
  218.  
  219. QUIT:
  220.     ON ERROR GOTO ERRQUIT
  221.  
  222.     IF ERR = 0 THEN
  223.         dlg% = EXITSUCCESS
  224.     ELSEIF ERR = STFQUIT THEN
  225.         dlg% = EXITQUIT
  226.     ELSE
  227.         dlg% = EXITFAILURE
  228.     END IF
  229. QUITL1:
  230.     sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfo0DlgProc", 0, "")
  231.     IF sz$ = "REACTIVATE" THEN
  232.         GOTO QUITL1
  233.     END IF
  234.     UIPop 1
  235.  
  236.     END
  237.  
  238. ERRQUIT:
  239.     i% = DoMsgBox(FATAL, TITLE, MB_OK+MB_TASKMODAL+MB_ICONHAND)
  240.     END
  241.  
  242.  
  243.  
  244. BADPATH:
  245.     sz$ = UIStartDlg(CUIDLL$, BADPATH, "FInfo0DlgProc", 0, "")
  246.     IF sz$ = "REACTIVATE" THEN
  247.         GOTO BADPATH
  248.     END IF
  249.     UIPop 1
  250.     RETURN
  251.  
  252. ASKQUIT:
  253.     AskForQuit
  254.     UIPop 1
  255.     RETURN
  256.  
  257. ' Perform the installation process!!
  258.  
  259. SUB Install STATIC
  260.  
  261.     CreateDir DstDir$, cmoNone
  262.     SampleDir$ = MakePath( DstDir$, SMPL )
  263.     LogoExe$ = MakePath( DstDir$, "LOGO.EXE" )
  264.     ClearCopyList
  265.     IF PROGS$ = "ON" THEN
  266.         AddSectionFilesToCopyList "Programs", SrcDir$, DstDir$
  267.     END IF
  268.     IF HELP$ = "ON" THEN
  269.         AddSectionFilesToCopyList "Help", SrcDir$, DstDir$
  270.     END IF
  271.     IF SAMPLES$ = "ON" THEN
  272.         AddSectionFilesToCopyList "Samples", SrcDir$, SampleDir$
  273.     END IF
  274.     CopyFilesInCopyList
  275.  
  276.     GrpFile$ = MakePath( GetWindowsDir(), "PCLOGO.GRP" )
  277.     CreateProgmanGroup "PC Logo", GrpFile$, cmoNone
  278.     ShowProgmanGroup  "PC Logo", 1, cmoNone
  279.     CreateProgmanItem "PC Logo", "PC Logo", LogoExe$, "", cmoOverwrite
  280.     CreateProgmanItem "PC Logo", README, MakePath( DstDir$, "README.WRI"), "", cmoOverwrite
  281.     IF HELP$ = "ON" THEN
  282.         CreateProgmanItem "PC Logo", "PC Logo Help", "WINHELP.EXE " + MakePath( DstDir$, "LOGO.HLP" ), "", cmoOverwrite
  283.     END IF
  284.     IF SAMPLES$ = "ON" THEN 
  285.         AddSamplesIcons
  286.     END IF
  287.  
  288.     ' Registration Database maintanance
  289.     IF NOT WIN30 AND PROGS$ = "ON" THEN
  290.         CreateRegKeyValue "PCLogo", "PC Logo for Windows"
  291.         CreateRegKeyValue "PCLogo\shell\open\command", LogoExe$ + " %1"
  292.         CreateRegKeyValue "PCLogo\shell\print\command", LogoExe$ + " /p %1"
  293.         CreateRegKeyValue ".lgo", "PCLogo"
  294.     END IF
  295.  
  296. END SUB
  297.  
  298. ' Combine path and file names
  299.  
  300. FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING
  301.     IF szDir$ = "" THEN
  302.         MakePath = szFile$
  303.     ELSEIF szFile$ = "" THEN
  304.         MakePath = szDir$
  305.     ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN
  306.         MakePath = szDir$ + szFile$
  307.     ELSE
  308.         MakePath = szDir$ + "\" + szFile$
  309.     END IF
  310. END FUNCTION
  311.  
  312. ' Convert a number into a string in KB
  313.  
  314. FUNCTION N2K( N& ) STATIC AS STRING
  315.     N2K = STR$( ( N& + 1023 ) / 1024 ) + " K"
  316. END FUNCTION
  317.  
  318. ' check the Windows and destination disks for enough free space.
  319. ' Return values:
  320. ' 0 - reenter path
  321. ' -1 - continue
  322.  
  323. FUNCTION CheckDisks STATIC AS INTEGER
  324.     CheckDisks = -1
  325. CHECK:
  326.     WINREQ& = 0
  327.     DSTREQ& = 0
  328.     IF PROGS$ = "ON" THEN
  329.         DSTREQ& = PROGREQ&
  330.     END IF
  331.     IF HELP$ = "ON" THEN
  332.         DSTREQ& = DSTREQ& + HELPREQ&
  333.     END IF
  334.     IF SAMPLES$ = "ON" THEN
  335.         DSTREQ& = DSTREQ& + SAMPLEREQ&
  336.     END IF
  337.     IF WINDISK$ = DSTDISK$ THEN
  338.         DSTREQ& = DSTREQ& + WINREQ&
  339.     END IF
  340.     AddListItem "ConfirmTextIn","0"
  341.     AddListItem "ConfirmTextIn","0"
  342.     IF WINREQ& > WINFREE& THEN
  343.         ReplaceListItem "ConfirmTextIn", 1, N2K( WINREQ& - WINFREE& )
  344.         ReplaceListItem "ConfirmTextIn", 2, WINDISK$
  345.         sz$ = UIStartDlg(CUIDLL$, TOOBIGWIN, "FConfirmDlgProc", APPHELP, HELPPROC$)
  346.         IF sz$ = "CONTINUE" THEN
  347.             GOTO CHECK
  348.         ELSE
  349.             AskForQuit
  350.             GOTO CHECK
  351.         END IF
  352.         UIPop 1
  353.     END IF
  354.     IF DSTREQ& > DSTFREE& THEN
  355.         ReplaceListItem "ConfirmTextIn", 1, N2K( DSTREQ& - DSTFREE& )
  356.         ReplaceListItem "ConfirmTextIn", 2, DSTDISK$
  357.         sz$ = UIStartDlg(CUIDLL$, TOOBIGDST, "FConfirmDlgProc", APPHELP, HELPPROC$)
  358.         IF sz$ = "EXIT" THEN
  359.             AskForQuit
  360.         END IF
  361.         CheckDisks = 0
  362.         UIPop 2    ' also remove the checkbox dialog
  363.     END IF
  364. END FUNCTION
  365.  
  366. ' Ask whether to quit
  367. ' Quits or returns
  368.  
  369. SUB AskForQuit STATIC
  370. ASK:
  371.     sz$ = UIStartDlg(CUIDLL$, ASKQUIT, "FQuitDlgProc", 0, "")
  372.  
  373.     IF sz$ = "EXIT" THEN
  374.         UIPopAll
  375.         ERROR STFQUIT
  376.     ELSEIF sz$ = "REACTIVATE" THEN
  377.         GOTO ASK
  378.     END IF
  379. END SUB
  380.  
  381. ' Find the required disk space for a specific group
  382.  
  383. FUNCTION GroupSize( GROUP$ ) STATIC AS LONG
  384.     ' HARD CODED!!!
  385.     DIM N AS LONG
  386.     IF GROUP$ = "Programs" THEN 
  387.         N = SIZE_PROGRAMS * 1024
  388.     END IF
  389.     IF GROUP$ = "Help" THEN 
  390.         N = SIZE_HELP * 1024
  391.     END IF
  392.     IF GROUP$ = "Samples" THEN 
  393.         N = SIZE_SAMPLES * 1024
  394.     END IF
  395.     GroupSize = N
  396. END FUNCTION
  397.  
  398. ' Add the samples in the samples list to the PROGMAN group
  399.  
  400. SUB AddSamplesIcons STATIC
  401.     Icon$ = SampleDir$ + "\LOGOPGM.ICO"
  402.     OPEN SrcDir$ + "SETUP\SAMPLES.LST" FOR INPUT AS #1
  403.     WHILE NOT EOF( 1 )
  404.         LINE INPUT #1, Fname$
  405.         LINE INPUT #1, Fdesc$
  406.         CreateProgmanItem "PC Logo", Fdesc$, SampleDir$ + "\" + Fname$, Icon$, cmoOverwrite
  407.     WEND
  408.     CLOSE #1
  409. END SUB
  410.